package br.com.foxinline.modelo;

import br.com.foxinline.enums.TipoFinanciamento;
import br.com.foxinline.enums.TipoTransmissao;
import br.com.foxinline.generico.EntidadeGenerica;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;

/**
 *
 * @author nayra
 */
@Entity
public class Itbi extends EntidadeGenerica implements Serializable {

    @Id
    @SequenceGenerator(sequenceName = "seq_itbi", name = "seq_itbi", allocationSize = 1)
    @GeneratedValue(generator = "seq_itbi", strategy = GenerationType.SEQUENCE)
    private Long id;
    @ManyToOne
    private Imovel imovel;
    @ManyToOne
    private Proprietario proprietario;
    
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataGeracao;
    
    private boolean pago;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataPagamento;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataVencimento;
    
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    @Column(scale = 2, precision = 10)
    private BigDecimal m2AreaTerreno;
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    @Column(scale = 2, precision = 10)
    private BigDecimal m2AreaEdificacao;
    
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    @Column(scale = 2, precision = 10)
    private BigDecimal vlrM2UfmpTerreno;
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    @Column(scale = 2, precision = 10)
    private BigDecimal vlrM2ReaisEdificacao;
    
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    @Column(scale = 2, precision = 10)
    private BigDecimal vlrTerreno;
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    @Column(scale = 2, precision = 10)
    private BigDecimal vlrEdificacao;
    
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    @Column(scale = 2, precision = 10)
    private BigDecimal vlrImovel;
    
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    @Column(scale = 2, precision = 10)
    private BigDecimal ufmp;
    
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    @Column(scale = 2, precision = 10)
    private BigDecimal fatorDepreciacaoEdificacao;
    
    @DecimalMin(value = "0.0000")
    @Digits(fraction = 4, integer = 10)
    @Column(scale=4, precision=10)
    private BigDecimal aliquota;
    
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    @Column(scale=2, precision=10)
    private BigDecimal valor;
    
    @Enumerated(EnumType.STRING)
    private TipoFinanciamento tipoFinanciamento;
    @Enumerated(EnumType.STRING)
    private TipoTransmissao tipoTransmissao;
    
    public BigDecimal getAliquota() {
        return aliquota;
    }

    public Date getDataGeracao() {
        return dataGeracao;
    }

    public Date getDataPagamento() {
        return dataPagamento;
    }

    public Long getId() {
        return id;
    }

    public Imovel getImovel() {
        return imovel;
    }

    public BigDecimal getM2AreaEdificacao() {
        return m2AreaEdificacao;
    }

    public BigDecimal getM2AreaTerreno() {
        return m2AreaTerreno;
    }

    public boolean isPago() {
        return pago;
    }

    public Proprietario getProprietario() {
        return proprietario;
    }

    public TipoFinanciamento getTipoFinanciamento() {
        return tipoFinanciamento;
    }

    public TipoTransmissao getTipoTransmissao() {
        return tipoTransmissao;
    }

    public BigDecimal getVlrEdificacao() {
        return vlrEdificacao;
    }

    public BigDecimal getVlrImovel() {
        return vlrImovel;
    }

    public BigDecimal getVlrTerreno() {
        return vlrTerreno;
    }

    public void setAliquota(BigDecimal aliquota) {
        this.aliquota = aliquota;
    }

    public void setDataGeracao(Date dataGeracao) {
        this.dataGeracao = dataGeracao;
    }

    public void setDataPagamento(Date dataPagamento) {
        this.dataPagamento = dataPagamento;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setImovel(Imovel imovel) {
        this.imovel = imovel;
    }

    public void setM2AreaEdificacao(BigDecimal m2AreaEdificacao) {
        this.m2AreaEdificacao = m2AreaEdificacao;
    }

    public void setM2AreaTerreno(BigDecimal m2AreaTerreno) {
        this.m2AreaTerreno = m2AreaTerreno;
    }

    public void setPago(boolean pago) {
        this.pago = pago;
    }

    public void setProprietario(Proprietario proprietario) {
        this.proprietario = proprietario;
    }

    public void setTipoFinanciamento(TipoFinanciamento tipoFinanciamento) {
        this.tipoFinanciamento = tipoFinanciamento;
    }

    public void setTipoTransmissao(TipoTransmissao tipoTransmissao) {
        this.tipoTransmissao = tipoTransmissao;
    }

    public void setVlrEdificacao(BigDecimal vlrEdificacao) {
        this.vlrEdificacao = vlrEdificacao;
    }

    public void setVlrImovel(BigDecimal vlrImovel) {
        this.vlrImovel = vlrImovel;
    }

    public void setVlrTerreno(BigDecimal vlrTerreno) {
        this.vlrTerreno = vlrTerreno;
    }

    public BigDecimal getValor() {
        return valor;
    }

    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }

    public Date getDataVencimento() {
        return dataVencimento;
    }

    public void setDataVencimento(Date dataVencimento) {
        this.dataVencimento = dataVencimento;
    }

    public BigDecimal getUfmp() {
        return ufmp;
    }

    public void setUfmp(BigDecimal ufmp) {
        this.ufmp = ufmp;
    }

    public BigDecimal getFatorDepreciacaoEdificacao() {
        return fatorDepreciacaoEdificacao;
    }

    public void setFatorDepreciacaoEdificacao(BigDecimal fatorDepreciacaoEdificacao) {
        this.fatorDepreciacaoEdificacao = fatorDepreciacaoEdificacao;
    }

    public BigDecimal getVlrM2ReaisEdificacao() {
        return vlrM2ReaisEdificacao;
    }

    public BigDecimal getVlrM2UfmpTerreno() {
        return vlrM2UfmpTerreno;
    }

    public void setVlrM2ReaisEdificacao(BigDecimal vlrM2ReaisEdificacao) {
        this.vlrM2ReaisEdificacao = vlrM2ReaisEdificacao;
    }

    public void setVlrM2UfmpTerreno(BigDecimal vlrM2UfmpTerreno) {
        this.vlrM2UfmpTerreno = vlrM2UfmpTerreno;
    }    
}